ASP.NET Core 是一個由微軟創建的跨平臺、高效能、開放原始碼的架構,可用於建立現代化、具備雲端功能的web應用程式。
透過 ASP.NET Core,你可以
1. 建置網站、API或是物聯網應用程式
2. 可以在Windows、macOs或是Linux上進行開發
3. 部署到雲端或公司內部主機
ASP.NET MVC 5 與 ASP.NET Core 差異:
移除web.config檔案
移除global.asax
加入appsettings.json
能夠裝載于下列各項:
內建DI
前後端拆分-使用wwwroot 靜態檔案目錄分離
Razor語法中的 Tag Helpers 更貼近原生html的寫法
ASP.NET core 包含
Web app :
Web API
gRPC
SignalR
Entity Framwork Core
Identity
.NET Core 的專案預設都是從Program.cs 中的 Main() 作為起始的進入點。
Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
啟動的流程如下
Web類型的專案則會透過 Program.Main()
中的 CreateHostBuilder()
來建立及設定 WebHost,並在其中透過呼叫ConfigureWebHostDefaults()
把Web Server 設置為 Kestral Server 並設定啟動要執行的Startup
,之後透過Build()
運行設定給初始化主機IHost(只能被使用一次)。
接著透過Run()
運行應用程式。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Startup裡主要的內容有兩個方法:
ConfigureServices
將應用程式所需的「服務」註冊到 DI 容器中
此方法只會在應用程式啟動時執行一次
Configure
此方法用來設定 ASP.NET Core 如何回應用戶端要求
透過 IApplicationBuilder 來設定 Request 進出的Pipeline
此方法一定要定義,ASP.NET Core 才能執行
透過下面簡單的圖示可以了解上述的運行流程
首先先從使用者發出HTTP的要求
透過反向代理(也可以不用)把要求發送到 ASP.NET Core的應用程式中
透過Kestrel Server 把 HTTP Request 送至 Middleware 也就是 Startup.Configure()中
透過Middleware 依序處理要求
接著運行應用程式的程式碼
再把程式運行結果透過 Middleware 依照倒序處理Response
最後再透過Kestrel Server將回應吐出
這就是一個基本ASP.NET Core 應用程式的流程
目錄 | 作用 |
---|---|
wwwroot/ | 網站靜態資源的資料夾 |
Properties/launchSettings.json | 透過 dotnet run 啟動時的檔案 |
*.csproj | 專案檔 |
Program.cs | 程式進入點 |
Startup.cs | 啟動設定 |
appsettings.json | 組態設定檔 |
目錄 | 作用 |
---|---|
Controllers | 控制器 |
Models | 模型 |
Views | 檢視 |
目錄 | 作用 |
---|---|
Pages | 所有Razor頁面 |
目錄 | 作用 |
---|---|
Controllers | 控制器 |
目錄 | 作用 |
---|---|
Pages | 所有頁面 |
Pages/_Host.cshtml | 預設首頁 (_Host.cshtml) |
Pages/*.razor | 所有 Blazor 元件(頁面) |
Shared | 共用 Blazor 元件的資料夾 |
Data | 預設的資料存取類別所在的資料夾 |
目錄 | 作用 |
---|---|
Protos | Protocol Buffer File |
Services | gRPC 服務的實作類別 |
ASP.NET Core 相對於以往的 ASP.NET,體系結構上有著比較大幅度的更改,使得ASP.NET Core 變得精簡且模組化。在開發工具方面,也多了許多選項可以選擇。
接下來的幾天,將會更深入理解ASP.NET Core,有問題也歡迎一同留言討論!